package real.meituan;

import java.util.HashSet;

public class Encoding {
    //LYA正在开发一个新的密码系统，要求所有密码必须符合“统一编码规范”：
    //
    //对于任意一种英文字母，该字母在密码中要么全部是大写形式，要么全部是小写形式（不能同时存在大写和小写）；
    //
    //英文字母表中的每个字母（不分大小写）都必须在密码中至少出现一次。
    //
    //给定一个长度为n的字符串s（仅由大小写英文字母组成），LYA需要通过最少的操作次数将其转换为符合统一编码规范的密码。她可以进行以下两种操作：
    //
    //操作一：在字符串的任意位置（包括开头和结尾）插入一个字母（大写或小写）；
    //
    //操作二：删除字符串中的任意一个字符。
    //
    //输出最少操作次数
    public int lessOperation(String s){
        int min = 0;
        int up = 0;
        int less = 0;
        HashSet<Character> upChar = new HashSet<>();
        HashSet<Character> lowChar = new HashSet<>();

        for (int i = 0; i < s.length(); i++){
            if(Character.isLowerCase(s.charAt(i))) {
                lowChar.add(s.charAt(i));
                less++;
            }
            else{
                upChar.add(s.charAt(i));
                up++;
            }
        }
        int upOperation = 26 - upChar.size() + less;
        int lowOperation = 26 - lowChar.size() + up;

        return Math.min(upOperation,lowOperation);
    }

    public static void main(String[] args) {
        Encoding encoding = new Encoding();
        // 测试用例1：全部小写
        String test1 = "abcdefghijklmnopqrstuvwxyz";
        System.out.println(encoding.lessOperation(test1)); // 预期输出：26

        // 测试用例2：全部大写
        String test2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        System.out.println(encoding.lessOperation(test2)); // 预期输出：26

        // 测试用例3：混合大小写且缺少部分字母
        String test3 = "aAbBcCdD";
        System.out.println(encoding.lessOperation(test3)); // 预期输出：26

        // 测试用例4：只有部分小写字母
        String test4 = "abc";
        System.out.println(encoding.lessOperation(test4)); // 预期输出：49
    }

}
